home *** CD-ROM | disk | FTP | other *** search
- *** linux-0.98.5/fs/ext/dir.c Tue Nov 10 12:54:53 1992
- --- linux/fs/ext/dir.c Sun Nov 15 20:06:26 1992
- ***************
- *** 69,74 ****
- --- 69,76 ----
-
- if (!inode || !S_ISDIR(inode->i_mode))
- return -EBADF;
- + if (filp->f_pos % 8 != 0)
- + return -EBADF;
- while (filp->f_pos < inode->i_size) {
- offset = filp->f_pos & 1023;
- bh = ext_bread(inode,(filp->f_pos)>>BLOCK_SIZE_BITS,0);
- ***************
- *** 78,92 ****
- }
- de = (struct ext_dir_entry *) (offset + bh->b_data);
- while (offset < 1024 && filp->f_pos < inode->i_size) {
- ! offset += de->rec_len;
- ! filp->f_pos += de->rec_len;
- ! if (de->rec_len < 8 || de->rec_len % 4 != 0 ||
- ! de->rec_len < de->name_len + 8) {
- ! printk ("ext_readdir: bad directory entry\n");
- printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
- inode->i_dev, inode->i_ino, offset, de->rec_len, de->name_len);
- ! return 0;
- }
- if (de->inode) {
- for (i = 0; i < de->name_len; i++)
- if (c = de->name[i])
- --- 80,98 ----
- }
- de = (struct ext_dir_entry *) (offset + bh->b_data);
- while (offset < 1024 && filp->f_pos < inode->i_size) {
- ! if (de->rec_len < 8 || de->rec_len % 8 != 0 ||
- ! de->rec_len < de->name_len + 8 ||
- ! (de->rec_len + filp->f_pos - 1) / 1024 > (filp->f_pos / 1024)) {
- ! printk ("ext_readdir: bad dir entry, skipping\n");
- printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
- inode->i_dev, inode->i_ino, offset, de->rec_len, de->name_len);
- ! filp->f_pos += 1024-offset;
- ! if (filp->f_pos > inode->i_size)
- ! filp->f_pos = inode->i_size;
- ! continue;
- }
- + offset += de->rec_len;
- + filp->f_pos += de->rec_len;
- if (de->inode) {
- for (i = 0; i < de->name_len; i++)
- if (c = de->name[i])
- *** linux-0.98.5/fs/ext/namei.c Tue Nov 10 12:54:53 1992
- --- linux/fs/ext/namei.c Sun Nov 15 20:05:31 1992
- ***************
- *** 122,139 ****
- if (prev_dir)
- *prev_dir = NULL;
- }
- ! if (de->rec_len < 8 || de->rec_len % 4 != 0 ||
- ! de->rec_len < de->name_len + 8) {
- printk ("ext_find_entry: bad dir entry\n");
- printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
- dir->i_dev, dir->i_ino, offset, de->rec_len, de->name_len);
- ! brelse (bh);
- ! return NULL;
- }
- if (ext_match(namelen,name,de)) {
- *res_dir = de;
- if (next_dir)
- ! if (offset + de->rec_len < dir->i_size)
- *next_dir = (struct ext_dir_entry *)
- ((char *) de + de->rec_len);
- else
- --- 122,144 ----
- if (prev_dir)
- *prev_dir = NULL;
- }
- ! if (de->rec_len < 8 || de->rec_len % 8 != 0 ||
- ! de->rec_len < de->name_len + 8 ||
- ! (((char *) de) + de->rec_len-1 >= BLOCK_SIZE+bh->b_data)) {
- printk ("ext_find_entry: bad dir entry\n");
- printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
- dir->i_dev, dir->i_ino, offset, de->rec_len, de->name_len);
- ! de = (struct ext_dir_entry *) (bh->b_data+BLOCK_SIZE);
- ! offset = ((offset / BLOCK_SIZE) + 1) * BLOCK_SIZE;
- ! continue;
- ! /* brelse (bh);
- ! return NULL; */
- }
- if (ext_match(namelen,name,de)) {
- *res_dir = de;
- if (next_dir)
- ! if (offset + de->rec_len < dir->i_size &&
- ! ((char *)de) + de->rec_len < BLOCK_SIZE+bh->b_data)
- *next_dir = (struct ext_dir_entry *)
- ((char *) de + de->rec_len);
- else
- ***************
- *** 221,227 ****
- #endif
- brelse(bh);
- bh = NULL;
- ! bh = ext_bread(dir,offset>>BLOCK_SIZE_BITS,1);
- if (!bh)
- return NULL;
- de = (struct ext_dir_entry *) bh->b_data;
- --- 226,232 ----
- #endif
- brelse(bh);
- bh = NULL;
- ! bh = ext_bread(dir,offset>>BLOCK_SIZE_BITS,0);
- if (!bh)
- return NULL;
- de = (struct ext_dir_entry *) bh->b_data;
- ***************
- *** 228,235 ****
- }
- if (offset >= dir->i_size) {
- /* Check that the directory entry fits in the block */
- ! if (offset % BLOCK_SIZE == 0
- ! || (BLOCK_SIZE - (offset % BLOCK_SIZE)) < rec_len) {
- if ((offset % BLOCK_SIZE) != 0) {
- /* If the entry does not fit in the
- block, the remainder of the block
- --- 233,240 ----
- }
- if (offset >= dir->i_size) {
- /* Check that the directory entry fits in the block */
- ! if (offset % BLOCK_SIZE == 0 ||
- ! (BLOCK_SIZE - (offset % BLOCK_SIZE)) < rec_len) {
- if ((offset % BLOCK_SIZE) != 0) {
- /* If the entry does not fit in the
- block, the remainder of the block
- ***************
- *** 262,268 ****
- dir->i_ctime = CURRENT_TIME;
- }
- if (de->rec_len < 8 || de->rec_len % 4 != 0 ||
- ! de->rec_len < de->name_len + 8) {
- printk ("ext_addr_entry: bad dir entry\n");
- printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
- dir->i_dev, dir->i_ino, offset, de->rec_len, de->name_len);
- --- 267,274 ----
- dir->i_ctime = CURRENT_TIME;
- }
- if (de->rec_len < 8 || de->rec_len % 4 != 0 ||
- ! de->rec_len < de->name_len + 8 ||
- ! (((char *) de) + de->rec_len-1 >= BLOCK_SIZE+bh->b_data)) {
- printk ("ext_addr_entry: bad dir entry\n");
- printk ("dev=%d, dir=%d, offset=%d, rec_len=%d, name_len=%d\n",
- dir->i_dev, dir->i_ino, offset, de->rec_len, de->name_len);
-